3
תגובות
כשאני יוצר שאילתא אז כמעט תמיד - לא משנה מה תוכן השאילתא - לא תחזור לי error.
כלומר שאם אני עושה קוד כזה:
זה לא יציג לי שום שגיאה ו-PHP תמשיך לבצע כרגיל את המשך הקוד, פשוט תוך כדי התעלמות
מהשאילתא הזאת.
עכשיו -
א. יש אפשרות בהגדרות או בקריאה למתודה כלשהיא שתבדוק שאם ה-query לא מחזיר true
אז היא תציג הודעת שגיאה?
ב. חשבתי על לעשות פונקציה או אולי אפילו לנסות לעשות מחלקה שלמה שתירש מ-mysqli ושם
לעשות את המתודה הזה, שתיראה בערך כך:
(זאת הפונקציה)
זה יהיה יעיל לעשות ככה? פשוט זה נראה לי לא ממש מקצועי ונוח לרשום אחרי כל
שאילתא - "or die(..)"..
כלומר שאם אני עושה קוד כזה:
$msi = // mysql connection
$msi->query("bla bla bla");
$msi->query("bla bla bla");
זה לא יציג לי שום שגיאה ו-PHP תמשיך לבצע כרגיל את המשך הקוד, פשוט תוך כדי התעלמות
מהשאילתא הזאת.
עכשיו -
א. יש אפשרות בהגדרות או בקריאה למתודה כלשהיא שתבדוק שאם ה-query לא מחזיר true
אז היא תציג הודעת שגיאה?
ב. חשבתי על לעשות פונקציה או אולי אפילו לנסות לעשות מחלקה שלמה שתירש מ-mysqli ושם
לעשות את המתודה הזה, שתיראה בערך כך:
(זאת הפונקציה)
function doquery($sql,$con) // $sql = query to perform; $con = the connection to the mysql server.
{
$query = $con->query($sql) or die($con->error);
return $query;
}
{
$query = $con->query($sql) or die($con->error);
return $query;
}
זה יהיה יעיל לעשות ככה? פשוט זה נראה לי לא ממש מקצועי ונוח לרשום אחרי כל
שאילתא - "or die(..)"..
3 תשובות
or die אתה בכלל אף פעם לא רוצה לעשות.
במקרה הגרוע אתה רוצה להציג למשתמש הודעת שגיאה ש"הי, חלה תקלה במערכת, שלחנו לעצמינו על זה מייל, עוד מעט נתקן".
בשביל לעשות דברים כאלה - אתה לא יכול סתם לעצור את ביצוע הסקריפט עם die
בעיקרון מה שאתה מחפש נקרא שגיאות Exceptions
והקוד של זה יראה ככה:
// $sql = query to perform;
// $con = the connection to the mysql server.
function doquery($sql,$con)
{
$query = $con->query($sql);
if($query === false)
throw new Exception($con->error);
return $query;
}
function getsomthing()
{
try
{
doquery("Select ..", $con);
echo 'everything succeeded';
}
catch(Exception $e)
{
echo 'had an error in sql..';
// echo $e->getMessage();
}
}
// $con = the connection to the mysql server.
function doquery($sql,$con)
{
$query = $con->query($sql);
if($query === false)
throw new Exception($con->error);
return $query;
}
function getsomthing()
{
try
{
doquery("Select ..", $con);
echo 'everything succeeded';
}
catch(Exception $e)
{
echo 'had an error in sql..';
// echo $e->getMessage();
}
}
אגב, למה שלא תעבור לכתוב ב OOP ?
האתר עדיין רק בשלבי פיתוח לכן אני מעדיף שהוא יציג לי את השגיאה כדי שאני אוכל לתקן מהר.
ותודה על העזרה בקוד.
וכשאתה אומר "לעבור לכתוב ב OOP", אתה מתכוון לכתיבת מחלקה שתרש את mysqli ודרכה לעשות את הפעולות?
נכון. ככה לא תצטרך להעביר את הפרמטר של הקונקשן מפונקציה לפונקציה.
ראה database singleton
---
אם אתה רוצה שזה יציג את השגיאה, אין בעיה, בזמן הפיתוח תציג ב catch את השגיאה.
תסיים את הפיתוח, תוריד את ההצגה מה-catch וסיימת.